package com.systemutils;

import android.annotation.TargetApi;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.os.Build;
import android.util.Log;
import android.widget.Toast;

import com.dialogutils.ToastUtil;

import java.util.Set;

/**
 * 蓝牙工具类
 */

public class BlueToothUtils {
    //A和n的值，需要根据实际环境进行检测得出
    private static final double A_Value = 59;
    /**
     * A - 发射端和接收端相隔1米时的信号强度
     */
    private static final double n_Value = 2.0;/** n - 环境衰减因子*/

    /**
     * 获取已连接蓝牙列表
     */
    public static Set<BluetoothDevice> getBoundedDevices() {
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        Set<BluetoothDevice> devices = adapter.getBondedDevices();
        return devices;
    }

    /**
     * 根据Rssi获得返回的距离,返回数据单位为m
     *
     * 计算公式：d = 10^((abs(RSSI) - A) / (10 * n))
     * 其中：
     * d - 计算所得距离
     * RSSI - 接收信号强度（负值）
     * A - 发射端和接收端相隔1米时的信号强度
     * n - 环境衰减因子
     */
    public static double getDistance(int rssi){
        int iRssi = Math.abs(rssi);
        double power = (iRssi - A_Value) / (10 * n_Value);
        return Math.pow(10, power);
    }

    /**
     * 检查蓝牙是否打开
     */
    public static boolean checkBlueTooth() {
        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        return bluetoothAdapter.isEnabled();
    }

    /**
     * 判断是否支持蓝牙，并打开蓝牙
     * 获取到BluetoothAdapter之后，还需要判断是否支持蓝牙，以及蓝牙是否打开。
     * 如果没打开，需要让用户打开蓝牙：
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
    public static boolean checkBleDevice(Context context){
        BluetoothManager bluetoothManager=(BluetoothManager)context.getSystemService(Context.BLUETOOTH_SERVICE);
        if (bluetoothManager != null) {
            BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
            if (mBluetoothAdapter != null) {
                if (!mBluetoothAdapter.isEnabled()){
                    //调用enable()方法直接打开蓝牙
                    try {
                        if (!mBluetoothAdapter.enable()){
                            Toast.makeText(context,"蓝牙打开失败",Toast.LENGTH_SHORT).show();
                            return false;
                        }else{
                            return true;
                        }
                    }catch (SecurityException e){
                        ToastUtil.showShort(context,"蓝牙打开失败");
                        return false;
                    }
                }
            } else {
                Log.i("tag","同意申请");
            }
        }
        return false;
    }
}
